<?php
// +----------------------------------------------------------------------
// | sfadmin - Suifeng Administration
// +----------------------------------------------------------------------
// | Copyright (c) 2017~2020 http://suifeng.tech All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: suifeng <1787585212@qq.com>
// +----------------------------------------------------------------------

namespace suifeng\builder\form\validator;

use suifeng\builder\form\Validator;

/**
 * 模型数据唯一。
 *
 */
class ModelExists extends Validator
{
    /**
     * 模型名称或对象。
     *
     * @var unknown
     */
    public $model;



    /**
     * 错误信息。
     *
     * @var string
     */
    public $message = '{control.label} 必须输入。';

    /**
     * 验证方法。
     */
    protected function _validate_core()
    {
        // 如果没有设置 $model，则检查表单对象的模型对象。
        if (empty($this->model)) {
            if (! empty($this->control->form->model)) {
                $this->model = $this->control->form->model;
            } else {
                return; // 找不到模型对象，就不用检查。
            }
        } else {
            // 如果$model=字符串，则解析成模型对象。
            if (is_string($this->model)) {
                $this->model = model($this->model);
            }
        }

        // 需要确定是create还是modify，两者处理方式有差异。
        if (! empty($this->control->form->model)) {
            $pk_field = $this->control->form->model->getPk();

            // 通过检查$_GET里面是否有pk字段，判断是create还是modify。
            $is_create = isset($_GET[$pk_field]) ? false : true;
        } else {
            return; // 不是模型表单，不用检查。
        }





        $value = $this->_get_control_value();

        if ($value !== null) {
            return;
        }

        $this->errors[] = $this->_format_xxxmessage(array('value' => $value));
    }
}
